﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tizer.Core;
using Tizer.Core.Enums;
using Tizer.Core.Repository;
using Tizer.Utilities;

namespace Tizer.Deploy
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine("Подготовка к занесению данных в БД");
            try
            {

                //Добавление языков
                using (var languageRepository = new LanguageRepository())
                {
                    var language1 = new Language { Code = "RU", Name = "Русский язык" };
                    var language2 = new Language { Code = "EN", Name = "Английский язык" };
                    languageRepository.Add(language1);
                    languageRepository.Add(language2);

                    //Добаление валюты
                    using (var currencyRepository = new CurrencyRepository(languageRepository.Context))
                    {
                        var currency1 = new Currency { Code = "BLR", Name = "Белорусский рубль", Language = language1 };
                        var currency2 = new Currency { Code = "RUR", Name = "Российский рубль", Language = language1 };
                        var currency3 = new Currency { Code = "UAH", Name = "Украинская гривна", Language = language1 };
                        var currency4 = new Currency { Code = "EUR", Name = "Евро", Language = language1 };
                        var currency5 = new Currency { Code = "USD", Name = "Американский доллар", Language = language1 };
                        var currency6 = new Currency { Code = "KZT", Name = "Казахский тенге", Language = language1 };
                        var currency7 = new Currency { Code = "LTL", Name = "Литовский лит", Language = language1 };
                        var currency8 = new Currency { Code = "LVL", Name = "Латвийский лат", Language = language1 };
                        var currency9 = new Currency { Code = "UZS", Name = "Узбекский сум", Language = language1 };

                        currencyRepository.Add(currency1);
                        currencyRepository.Add(currency2);
                        currencyRepository.Add(currency3);
                        currencyRepository.Add(currency4);
                        currencyRepository.Add(currency5);
                        currencyRepository.Add(currency6);
                        currencyRepository.Add(currency7);
                        currencyRepository.Add(currency8);
                        currencyRepository.Add(currency9);
                    }

                    // добавление стран
                    using (var countryRepository = new CountryRepository(languageRepository.Context))
                    {
                        var country1 = new Country { Name = "Беларусь", Code = "BLR", Language = language1 };
                        var country2 = new Country { Name = "Россия", Code = "RUS", Language = language1 };
                        var country3 = new Country { Name = "Украина", Code = "UKR", Language = language1 };
                        var country4 = new Country { Name = "Казахстан", Code = "KAZ", Language = language1 };
                        var country5 = new Country { Name = "Литва", Code = "LTU", Language = language1 };
                        var country6 = new Country { Name = "Латвия", Code = "LVA", Language = language1 };
                        var country7 = new Country { Name = "Узбекистан", Code = "UZB", Language = language1 };

                        countryRepository.Add(country1);
                        countryRepository.Add(country2);
                        countryRepository.Add(country3);
                        countryRepository.Add(country4);
                        countryRepository.Add(country5);
                        countryRepository.Add(country6);
                        countryRepository.Add(country7);

                        // Добавление городов
                        using (var cityRepository = new CityRepository(languageRepository.Context))
                        {
                            string[] cityArray1 = new string[]
                                                  {
                                                      "Барановичи", "Берёза", "Брест", "Ганцевичи", "Давид-Городок",
                                                      "Дрогичин", "Жабинка", "Иваново", "Ивацевичи", "Каменец", "Кобрин"
                                                      ,
                                                      "Лунинец", "Ляховичи", "Малорита", "Пинск", "Пружаны", "Столин",
                                                      "Брагин", "Буда-Кошелёво", "Ветка", "Гомель", "Добруш", "Ельск",
                                                      "Житковичи", "Жлобин", "Калинковичи", "Корма", "Лельчицы", "Лоев",
                                                      "Мозырь", "Наровля", "Октябрьский", "Петриков", "Речица",
                                                      "Рогачёв",
                                                      "Светлогорск", "Хойники", "Чечерск", "Белыничи", "Бобруйск",
                                                      "Быхов",
                                                      "Глуск", "Горки", "Дрибин", "Кировск", "Климовичи", "Кличев",
                                                      "Костюковичи", "Краснополье", "Кричев", "Круглое", "Могилёв",
                                                      "Мстиславль", "Осиповичи", "Славгород", "Хотимск", "Чаусы",
                                                      "Чериков",
                                                      "Шклов", "Березино", "Борисов", "Вилейка", "Воложин", "Дзержинск",
                                                      "Жодино", "Клецк", "Копыль", "Крупки", "Логойск", "Любань",
                                                      "Марьина Горка", "Минск", "Молодечно", "Мядель", "Несвиж", "Слуцк"
                                                      ,
                                                      "Смиловичи", "Смолевичи", "Солигорск", "Старые Дороги", "Столбцы",
                                                      "Узда", "Фаниполь", "Червень", "Большая Берестовица", "Волковыск",
                                                      "Вороново", "Гродно", "Дятлово", "Зельва", "Ивье", "Кореличи",
                                                      "Лида",
                                                      "Мосты", "Новогрудок", "Островец", "Ошмяны", "Свислочь", "Слоним",
                                                      "Сморгонь", "Щучин", "Витебск", "Бешенковичи", "Браслав",
                                                      "Верхнедвинск", "Глубокое", "Городок", "Докшицы", "Дубровно",
                                                      "Лепель"
                                                      , "Лиозно", "Миоры", "Орша", "Полоцк", "Поставы", "Россоны",
                                                      "Сенно",
                                                      "Толочин", "Ушачи", "Чашники", "Шарковщина", "Шумилино"
                                                  };

                            foreach (var c in cityArray1)
                            {
                                var city = new City { Country = country1, Name = c.Trim(), Language = language1 };
                                cityRepository.Add(city);
                            }
                        }

                    }

                    // добавление услуг

                    using (var serviceRepository = new ServiceRepository(languageRepository.Context))
                    {
                        string[] serviceRootArray = new string[]
                                                    {
                                                        "Полиграфия", 
                                                        "Наружная реклама", 
                                                        "Indoor реклама",
                                                        "Сувенирная продукция", 
                                                        "Реклама на радио",
                                                        "Видеореклама и ТВ", 
                                                        "Реклама в общественном транспорте",
                                                        "Копирайтинг и PR", 
                                                        "Дизайн и Фото",
                                                        "Web-дизайн и Интернет-маркетинг",
                                                        "Выставочные стенды и оборудование",
                                                        "Тиражирование CD/DVD дисков",
                                                        "Реклама в печатных СМИ", 
                                                        "Реклама в метро",
                                                        "Этикетка, упаковка, тара", 
                                                        "BTL (Непрямая реклама)"
                                                    };
                        // int i = 0;
                        foreach (var s in serviceRootArray)
                        {
                            var service = new Service { Name = s, IsPublished = true, Code = "", Language = language1 };
                            serviceRepository.Add(service);
                            // serviceRepository.SaveChanges();

                            //switch (i)
                            //{
                            //    case 0:
                            //        var service01 = new Service { Name = "Цифровая печать", IsPublished = true, Parent_ID = service.ID };
                            //        break;

                            //}
                            //i++;
                        }
                    }
                    languageRepository.SaveChanges();
                    Console.WriteLine("Языки добавлены...");
                    Console.WriteLine("Валюты добавлены...");
                    Console.WriteLine("Страны добавлены...");
                    Console.WriteLine("Города добавлены...");
                    Console.WriteLine("Сервисы добавлены...");
                }

                // Добавление типов изображения
                using (var imageTypeRepository = new ImageTypeRepository())
                {
                    var imageType1 = new ImageType { Name = "Company Logo", Description = "Логотип компании", MaxWidth = 300, MaxHeight = 300, Code = "COMPANY_LOGO" };
                    var imageType2 = new ImageType { Name = "Company Map", Description = "Компания, карта проезда", MaxWidth = 3000, MaxHeight = 3000, Code = "COMPANY_MAP" };
                    var imageType3 = new ImageType { Name = "Outdoor Side Image", Description = "Изображение площадки наружной рекламы", MaxWidth = 3000, MaxHeight = 3000, Code = "OUTDOORSIDE_IMAGE" };
                    var imageType4 = new ImageType { Name = "Outdoor Side Map", Description = "Площалка наружной рекламы на карте", MaxWidth = 3000, MaxHeight = 3000, Code = "OUTDOORSIDE_MAP" };
                    var imageType5 = new ImageType { Name = "Format Icon", Description = "Иконка формата рекламы", MaxWidth = 100, MaxHeight = 100, Code = "FORMAT_ICON" };

                    imageTypeRepository.Add(imageType1);
                    imageTypeRepository.Add(imageType2);
                    imageTypeRepository.Add(imageType3);
                    imageTypeRepository.Add(imageType4);
                    imageTypeRepository.Add(imageType5);
                    imageTypeRepository.SaveChanges();
                    Console.WriteLine("Типы изображений добавлены...");
                }

                // Создание админского аккаунта по умолчанию
                using (var accountRepository = new AccountRepository())
                {
                    string passwordSalt = PasswordHelper.GeneratePasswordSalt();
                    var account = new Account
                    {
                        AccountType = AccountType.Administrator,
                        CreatedDate = DateTime.Now,
                        Description = "Аккаунт по умолчанию для тестовой работы в системе",
                        IsActive = true,
                        IsApproved = true,
                        LastLoginDate = DateTime.Now,
                        LastLockedOutDate = DateTime.Now,
                        PasswordSalt = passwordSalt,
                        PasswordHash = PasswordHelper.HashPassword("admin", passwordSalt),
                        Login = "admin",
                        RatingVote = 0,
                        RatingScore = 0,
                        Phone = 0,
                        Phone2 = 0,
                        MobilePhone = 0,
                        Fax = 0,
                        ICQ = 0,
                        PostalCode = 0
                    };
                    accountRepository.Add(account);
                    accountRepository.SaveChanges();
                    Console.WriteLine("Аккаунт по умолчанию добавлен...");
                }

                Console.WriteLine("Данные занесены. Нажмите любую клавишу.");
                Console.ReadKey();
            }
            catch (Exception exception)
            {

                Console.WriteLine("Прозошел сбой!");
                Console.WriteLine(exception.StackTrace);
                Console.ReadKey();
            }
        }
    }
}
